const path = require('path')
const fileUtils = require('../utils/file_utils')

const WebSocket = require('ws')  // npm i ws -S
const wss = new WebSocket.Server({  // 创建出WebSocket实例对象, 绑定的端口号为9998
    port: 9998
})

// 服务端开启了监听
module.exports.listen = ()=>{
    // 对客户端的连接事件进行监听,  client: 代表的是客户端的连接socket对象
    wss.on('connection', client=>{
        console.log('有客户端连接成功了...')

        // 对客户端的连接对象进行message事件的监听, msg: 有客户端发给服务端的数据
        client.on('message', async msg=>{
            console.log('客户端发送给服务端的数据: '+ msg)
            let payload = JSON.parse(msg)
            // console.log(payload)
            const action = payload.action

            if(action === 'getData') {  // action为getData时,服务器会在客户端发过来数据的基础之上,增加data字段, 然后将其返回给客户端

                // payload.chartName: trend seller map rank hot stock
                let filePath = `../data/${payload.chartName}.json`
                filePath = path.join(__dirname, filePath)

                const ret = await fileUtils.getFileJsonData(filePath)  // 读取到文件内容
                // 需要在服务端获取到数据的基础之上, 增加一个data的字段, data所对应的值就是某个json文件的内容
                payload.data = ret  // 根据请求的路径返回对应的内容

                client.send(JSON.stringify(payload))

            } else {  // 原封不动的将所接收到的数据转发给每一个处于连接状态的客户端

                // wss.clients 表示所有客户端的连接
                wss.clients.forEach(client=>{
                    // client.send(msg)
                    client.send(JSON.stringify(payload))
                })
            }

            // 由服务端发送数据给客户端
            // client.send('hello socket from backend')
        })
    })
}








